home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / cpu / i8085 / 8085dasm.c next >
C/C++ Source or Header  |  1999-03-26  |  38KB  |  561 lines

  1. /*****************************************************************************
  2.  *
  3.  *     8085dasm.c
  4.  *     Portable I8085A disassembler
  5.  *
  6.  *     Copyright (c) 1999 Juergen Buchmueller, all rights reserved.
  7.  *     Partially based on information out of Z80Em by Marcel De Kogel
  8.  *
  9.  *     - This source code is released as freeware for non-commercial purposes.
  10.  *     - You are free to use and redistribute this code in modified or
  11.  *       unmodified form, provided you list me in the credits.
  12.  *     - If you modify this source code, you must add a notice to each modified
  13.  *       source file that it has been changed.  If you're a nice person, you
  14.  *       will clearly mark each change too.  :)
  15.  *     - If you wish to use this for commercial purposes, please contact me at
  16.  *       pullmoll@t-online.de
  17.  *     - The author of this copywritten work reserves the right to change the
  18.  *     terms of its usage and license at any time, including retroactively
  19.  *   - This entire notice must remain in the source code.
  20.  *
  21.  *****************************************************************************/
  22.  
  23. #include <stdio.h>
  24. #include "osd_cpu.h"
  25. #include "memory.h"
  26.  
  27. /* 8080/8085A mnemonics were more irritation than information
  28.    What would you guess "CP $3456" to mean? It's not compare,
  29.    but call if plus ... therefore: */
  30. #define Z80_MNEMONICS
  31.  
  32. #define OP(A)   cpu_readop(A)
  33. #define ARG(A)  cpu_readop_arg(A)
  34. #define ARGW(A) cpu_readop_arg(A) + (cpu_readop_arg((A+1)&0xffff) << 8)
  35.  
  36. unsigned Dasm8085(char *buff, unsigned pc)
  37. {
  38.     UINT8 op;
  39.     unsigned PC = pc;
  40.     switch (op = OP(pc++))
  41.     {
  42. #ifdef  Z80_MNEMONICS
  43.         case 0x00: sprintf (buff,"nop");                             break;
  44.         case 0x01: sprintf (buff,"ld   bc,$%04x", ARGW(pc)); pc+=2;  break;
  45.         case 0x02: sprintf (buff,"ld   (bc),a");                     break;
  46.         case 0x03: sprintf (buff,"inc  bc");                         break;
  47.         case 0x04: sprintf (buff,"inc  b");                          break;
  48.         case 0x05: sprintf (buff,"dec  b");                          break;
  49.         case 0x06: sprintf (buff,"ld   b,$%02x", ARG(pc)); pc++;     break;
  50.         case 0x07: sprintf (buff,"rlca");                            break;
  51.         case 0x08: sprintf (buff,"???  $%02x", op);                  break;
  52.         case 0x09: sprintf (buff,"add  hl,bc");                      break;
  53.         case 0x0a: sprintf (buff,"ld   a,(bc)");                     break;
  54.         case 0x0b: sprintf (buff,"dec  bc");                         break;
  55.         case 0x0c: sprintf (buff,"inc  c");                          break;
  56.         case 0x0d: sprintf (buff,"dec  c");                          break;
  57.         case 0x0e: sprintf (buff,"ld   c,$%02x", ARG(pc)); pc++;     break;
  58.         case 0x0f: sprintf (buff,"rrca");                            break;
  59.         case 0x10: sprintf (buff,"???  $%02x", op);                  break;
  60.         case 0x11: sprintf (buff,"ld   de,$%04x", ARGW(pc)); pc+=2;  break;
  61.         case 0x12: sprintf (buff,"ld   (de),a");                     break;
  62.         case 0x13: sprintf (buff,"inc  de");                         break;
  63.         case 0x14: sprintf (buff,"inc  d");                          break;
  64.         case 0x15: sprintf (buff,"dec  d");                          break;
  65.         case 0x16: sprintf (buff,"ld   d,$%02x", ARG(pc)); pc++;     break;
  66.         case 0x17: sprintf (buff,"rla");                             break;
  67.         case 0x18: sprintf (buff,"???  $%02x", op);                  break;
  68.         case 0x19: sprintf (buff,"add  hl,de");                      break;
  69.         case 0x1a: sprintf (buff,"ld   a,(de)");                     break;
  70.         case 0x1b: sprintf (buff,"dec  de");                         break;
  71.         case 0x1c: sprintf (buff,"inc  e");                          break;
  72.         case 0x1d: sprintf (buff,"dec  e");                          break;
  73.         case 0x1e: sprintf (buff,"ld   e,$%02x", ARG(pc)); pc++;     break;
  74.         case 0x1f: sprintf (buff,"rra");                             break;
  75.         case 0x20: sprintf (buff,"rim");                             break;
  76.         case 0x21: sprintf (buff,"ld   hl,$%04x", ARGW(pc)); pc+=2;  break;
  77.         case 0x22: sprintf (buff,"ld   ($%04x),hl", ARGW(pc)); pc+=2;break;
  78.         case 0x23: sprintf (buff,"inc  hl");                         break;
  79.         case 0x24: sprintf (buff,"inc  h");                          break;
  80.         case 0x25: sprintf (buff,"dec  h");                          break;
  81.         case 0x26: sprintf (buff,"ld   h,$%02x", ARG(pc)); pc++;     break;
  82.         case 0x27: sprintf (buff,"daa");                             break;
  83.         case 0x28: sprintf (buff,"???  $%02x", op);                  break;
  84.         case 0x29: sprintf (buff,"add  hl,hl");                      break;
  85.         case 0x2a: sprintf (buff,"ld   hl,($%04x)", ARGW(pc)); pc+=2;break;
  86.         case 0x2b: sprintf (buff,"dec  hl");                         break;
  87.         case 0x2c: sprintf (buff,"inc  l");                          break;
  88.         case 0x2d: sprintf (buff,"dec  l");                          break;
  89.         case 0x2e: sprintf (buff,"ld   l,$%02x", ARG(pc)); pc++;     break;
  90.         case 0x2f: sprintf (buff,"cpl");                             break;
  91.         case 0x30: sprintf (buff,"sim");                             break;
  92.         case 0x31: sprintf (buff,"ld   sp,$%04x", ARGW(pc)); pc+=2;  break;
  93.         case 0x32: sprintf (buff,"ld   ($%04x),a", ARGW(pc)); pc+=2; break;
  94.         case 0x33: sprintf (buff,"inc  sp");                         break;
  95.         case 0x34: sprintf (buff,"inc  (hl)");                       break;
  96.         case 0x35: sprintf (buff,"dec  (hl)");                       break;
  97.         case 0x36: sprintf (buff,"ld   (hl),$%02x", ARG(pc)); pc++;  break;
  98.         case 0x37: sprintf (buff,"scf");                             break;
  99.         case 0x38: sprintf (buff,"???  $%02x", op);                  break;
  100.         case 0x39: sprintf (buff,"add  hl,sp");                      break;
  101.         case 0x3a: sprintf (buff,"ld   a,($%04x)", ARGW(pc)); pc+=2; break;
  102.         case 0x3b: sprintf (buff,"dec  sp");                         break;
  103.         case 0x3c: sprintf (buff,"inc  a");                          break;
  104.         case 0x3d: sprintf (buff,"dec  a");                          break;
  105.         case 0x3e: sprintf (buff,"ld   a,$%02x", ARG(pc)); pc++;     break;
  106.         case 0x3f: sprintf (buff,"ccf");                             break;
  107.         case 0x40: sprintf (buff,"ld   b,b");                        break;
  108.         case 0x41: sprintf (buff,"ld   b,c");                        break;
  109.         case 0x42: sprintf (buff,"ld   b,d");                        break;
  110.         case 0x43: sprintf (buff,"ld   b,e");                        break;
  111.         case 0x44: sprintf (buff,"ld   b,h");                        break;
  112.         case 0x45: sprintf (buff,"ld   b,l");                        break;
  113.         case 0x46: sprintf (buff,"ld   b,(hl)");                     break;
  114.         case 0x47: sprintf (buff,"ld   b,a");                        break;
  115.         case 0x48: sprintf (buff,"ld   c,b");                        break;
  116.         case 0x49: sprintf (buff,"ld   c,c");                        break;
  117.         case 0x4a: sprintf (buff,"ld   c,d");                        break;
  118.         case 0x4b: sprintf (buff,"ld   c,e");                        break;
  119.         case 0x4c: sprintf (buff,"ld   c,h");                        break;
  120.         case 0x4d: sprintf (buff,"ld   c,l");                        break;
  121.         case 0x4e: sprintf (buff,"ld   c,(hl)");                     break;
  122.         case 0x4f: sprintf (buff,"ld   c,a");                        break;
  123.         case 0x50: sprintf (buff,"ld   d,b");                        break;
  124.         case 0x51: sprintf (buff,"ld   d,c");                        break;
  125.         case 0x52: sprintf (buff,"ld   d,d");                        break;
  126.         case 0x53: sprintf (buff,"ld   d,e");                        break;
  127.         case 0x54: sprintf (buff,"ld   d,h");                        break;
  128.         case 0x55: sprintf (buff,"ld   d,l");                        break;
  129.         case 0x56: sprintf (buff,"ld   d,(hl)");                     break;
  130.         case 0x57: sprintf (buff,"ld   d,a");                        break;
  131.         case 0x58: sprintf (buff,"ld   e,b");                        break;
  132.         case 0x59: sprintf (buff,"ld   e,c");                        break;
  133.         case 0x5a: sprintf (buff,"ld   e,d");                        break;
  134.         case 0x5b: sprintf (buff,"ld   e,e");                        break;
  135.         case 0x5c: sprintf (buff,"ld   e,h");                        break;
  136.         case 0x5d: sprintf (buff,"ld   e,l");                        break;
  137.         case 0x5e: sprintf (buff,"ld   e,(hl)");                     break;
  138.         case 0x5f: sprintf (buff,"ld   e,a");                        break;
  139.         case 0x60: sprintf (buff,"ld   h,b");                        break;
  140.         case 0x61: sprintf (buff,"ld   h,c");                        break;
  141.         case 0x62: sprintf (buff,"ld   h,d");                        break;
  142.         case 0x63: sprintf (buff,"ld   h,e");                        break;
  143.         case 0x64: sprintf (buff,"ld   h,h");                        break;
  144.         case 0x65: sprintf (buff,"ld   h,l");                        break;
  145.         case 0x66: sprintf (buff,"ld   h,(hl)");                     break;
  146.         case 0x67: sprintf (buff,"ld   h,a");                        break;
  147.         case 0x68: sprintf (buff,"ld   l,b");                        break;
  148.         case 0x69: sprintf (buff,"ld   l,c");                        break;
  149.         case 0x6a: sprintf (buff,"ld   l,d");                        break;
  150.         case 0x6b: sprintf (buff,"ld   l,e");                        break;
  151.         case 0x6c: sprintf (buff,"ld   l,h");                        break;
  152.         case 0x6d: sprintf (buff,"ld   l,l");                        break;
  153.         case 0x6e: sprintf (buff,"ld   l,(hl)");                     break;
  154.         case 0x6f: sprintf (buff,"ld   l,a");                        break;
  155.         case 0x70: sprintf (buff,"ld   (hl),b");                     break;
  156.         case 0x71: sprintf (buff,"ld   (hl),c");                     break;
  157.         case 0x72: sprintf (buff,"ld   (hl),d");                     break;
  158.         case 0x73: sprintf (buff,"ld   (hl),e");                     break;
  159.         case 0x74: sprintf (buff,"ld   (hl),h");                     break;
  160.         case 0x75: sprintf (buff,"ld   (hl),l");                     break;
  161.         case 0x76: sprintf (buff,"halt");                            break;
  162.         case 0x77: sprintf (buff,"ld   (hl),a");                     break;
  163.         case 0x78: sprintf (buff,"ld   a,b");                        break;
  164.         case 0x79: sprintf (buff,"ld   a,c");                        break;
  165.         case 0x7a: sprintf (buff,"ld   a,d");                        break;
  166.         case 0x7b: sprintf (buff,"ld   a,e");                        break;
  167.         case 0x7c: sprintf (buff,"ld   a,h");                        break;
  168.         case 0x7d: sprintf (buff,"ld   a,l");                        break;
  169.         case 0x7e: sprintf (buff,"ld   a,(hl)");                     break;
  170.         case 0x7f: sprintf (buff,"ld   a,a");                        break;
  171.         case 0x80: sprintf (buff,"add  a,b");                        break;
  172.         case 0x81: sprintf (buff,"add  a,c");                        break;
  173.         case 0x82: sprintf (buff,"add  a,d");                        break;
  174.         case 0x83: sprintf (buff,"add  a,e");                        break;
  175.         case 0x84: sprintf (buff,"add  a,h");                        break;
  176.         case 0x85: sprintf (buff,"add  a,l");                        break;
  177.         case 0x86: sprintf (buff,"add  a,(hl)");                     break;
  178.         case 0x87: sprintf (buff,"add  a,a");                        break;
  179.         case 0x88: sprintf (buff,"adc  a,b");                        break;
  180.         case 0x89: sprintf (buff,"adc  a,c");                        break;
  181.         case 0x8a: sprintf (buff,"adc  a,d");                        break;
  182.         case 0x8b: sprintf (buff,"adc  a,e");                        break;
  183.         case 0x8c: sprintf (buff,"adc  a,h");                        break;
  184.         case 0x8d: sprintf (buff,"adc  a,l");                        break;
  185.         case 0x8e: sprintf (buff,"adc  a,(hl)");                     break;
  186.         case 0x8f: sprintf (buff,"adc  a,a");                        break;
  187.         case 0x90: sprintf (buff,"sub  b");                          break;
  188.         case 0x91: sprintf (buff,"sub  c");                          break;
  189.         case 0x92: sprintf (buff,"sub  d");                          break;
  190.         case 0x93: sprintf (buff,"sub  e");                          break;
  191.         case 0x94: sprintf (buff,"sub  h");                          break;
  192.         case 0x95: sprintf (buff,"sub  l");                          break;
  193.         case 0x96: sprintf (buff,"sub  (hl)");                       break;
  194.         case 0x97: sprintf (buff,"sub  a");                          break;
  195.         case 0x98: sprintf (buff,"sbc  a,b");                        break;
  196.         case 0x99: sprintf (buff,"sbc  a,c");                        break;
  197.         case 0x9a: sprintf (buff,"sbc  a,d");                        break;
  198.         case 0x9b: sprintf (buff,"sbc  a,e");                        break;
  199.         case 0x9c: sprintf (buff,"sbc  a,h");                        break;
  200.         case 0x9d: sprintf (buff,"sbc  a,l");                        break;
  201.         case 0x9e: sprintf (buff,"sbc  a,(hl)");                     break;
  202.         case 0x9f: sprintf (buff,"sbc  a,a");                        break;
  203.         case 0xa0: sprintf (buff,"and  b");                          break;
  204.         case 0xa1: sprintf (buff,"and  c");                          break;
  205.         case 0xa2: sprintf (buff,"and  d");                          break;
  206.         case 0xa3: sprintf (buff,"and  e");                          break;
  207.         case 0xa4: sprintf (buff,"and  h");                          break;
  208.         case 0xa5: sprintf (buff,"and  l");                          break;
  209.         case 0xa6: sprintf (buff,"and  (hl)");                       break;
  210.         case 0xa7: sprintf (buff,"and  a");                          break;
  211.         case 0xa8: sprintf (buff,"xor  b");                          break;
  212.         case 0xa9: sprintf (buff,"xor  c");                          break;
  213.         case 0xaa: sprintf (buff,"xor  d");                          break;
  214.         case 0xab: sprintf (buff,"xor  e");                          break;
  215.         case 0xac: sprintf (buff,"xor  h");                          break;
  216.         case 0xad: sprintf (buff,"xor  l");                          break;
  217.         case 0xae: sprintf (buff,"xor  (hl)");                       break;
  218.         case 0xaf: sprintf (buff,"xor  a");                          break;
  219.         case 0xb0: sprintf (buff,"or   b");                          break;
  220.         case 0xb1: sprintf (buff,"or   c");                          break;
  221.         case 0xb2: sprintf (buff,"or   d");                          break;
  222.         case 0xb3: sprintf (buff,"or   e");                          break;
  223.         case 0xb4: sprintf (buff,"or   h");                          break;
  224.         case 0xb5: sprintf (buff,"or   l");                          break;
  225.         case 0xb6: sprintf (buff,"or   (hl)");                       break;
  226.         case 0xb7: sprintf (buff,"or   a");                          break;
  227.         case 0xb8: sprintf (buff,"cp   b");                          break;
  228.         case 0xb9: sprintf (buff,"cp   c");                          break;
  229.         case 0xba: sprintf (buff,"cp   d");                          break;
  230.         case 0xbb: sprintf (buff,"cp   e");                          break;
  231.         case 0xbc: sprintf (buff,"cp   h");                          break;
  232.         case 0xbd: sprintf (buff,"cp   l");                          break;
  233.         case 0xbe: sprintf (buff,"cp   (hl)");                       break;
  234.         case 0xbf: sprintf (buff,"cp   a");                          break;
  235.         case 0xc0: sprintf (buff,"ret  nz");                         break;
  236.         case 0xc1: sprintf (buff,"pop  bc");                         break;
  237.         case 0xc2: sprintf (buff,"jp   nz,$%04x", ARGW(pc)); pc+=2;  break;
  238.         case 0xc3: sprintf (buff,"jp   $%04x", ARGW(pc)); pc+=2;     break;
  239.         case 0xc4: sprintf (buff,"call nz,$%04x", ARGW(pc)); pc+=2;  break;
  240.         case 0xc5: sprintf (buff,"push bc");                         break;
  241.         case 0xc6: sprintf (buff,"add  a,$%02x", ARG(pc)); pc++;     break;
  242.         case 0xc7: sprintf (buff,"rst  $00");                        break;
  243.         case 0xc8: sprintf (buff,"ret  z");                          break;
  244.         case 0xc9: sprintf (buff,"ret");                             break;
  245.         case 0xca: sprintf (buff,"jp   z,$%04x", ARGW(pc)); pc+=2;   break;
  246.         case 0xcb: sprintf (buff,"???  $%02x", op);                  break;
  247.         case 0xcc: sprintf (buff,"call z,$%04x", ARGW(pc)); pc+=2;   break;
  248.         case 0xcd: sprintf (buff,"call $%04x", ARGW(pc)); pc+=2;     break;
  249.         case 0xce: sprintf (buff,"adc  a,$%02x", ARG(pc)); pc++;     break;
  250.         case 0xcf: sprintf (buff,"rst  $08");                        break;
  251.         case 0xd0: sprintf (buff,"ret  nc");                         break;
  252.         case 0xd1: sprintf (buff,"pop  de");                         break;
  253.         case 0xd2: sprintf (buff,"jp   nc,$%04x", ARGW(pc)); pc+=2;  break;
  254.         case 0xd3: sprintf (buff,"out  ($%02x),a", ARG(pc)); pc++;   break;
  255.         case 0xd4: sprintf (buff,"call nc,$%04x", ARGW(pc)); pc+=2;  break;
  256.         case 0xd5: sprintf (buff,"push de");                         break;
  257.         case 0xd6: sprintf (buff,"sub  $%02x", ARG(pc)); pc++;       break;
  258.         case 0xd7: sprintf (buff,"rst  $10");                        break;
  259.         case 0xd8: sprintf (buff,"ret  c");                          break;
  260.         case 0xd9: sprintf (buff,"???  $%02x", op);                  break;
  261.         case 0xda: sprintf (buff,"jp   c,$%04x", ARGW(pc)); pc+=2;   break;
  262.         case 0xdb: sprintf (buff,"in   a,($%02x)", ARG(pc)); pc++;   break;
  263.         case 0xdc: sprintf (buff,"call c,$%04x", ARGW(pc)); pc+=2;   break;
  264.         case 0xdd: sprintf (buff,"???  $%02x", op);                  break;
  265.         case 0xde: sprintf (buff,"sub  $%02x", ARG(pc)); pc++;       break;
  266.         case 0xdf: sprintf (buff,"rst  $18");                        break;
  267.         case 0xe0: sprintf (buff,"ret  pe");                         break;
  268.         case 0xe1: sprintf (buff,"pop  hl");                         break;
  269.         case 0xe2: sprintf (buff,"jp   pe,$%04x", ARGW(pc)); pc+=2;  break;
  270.         case 0xe3: sprintf (buff,"ex   (sp),hl");                    break;
  271.         case 0xe4: sprintf (buff,"call pe,$%04x", ARGW(pc)); pc+=2;  break;
  272.         case 0xe5: sprintf (buff,"push hl");                         break;
  273.         case 0xe6: sprintf (buff,"and  $%02x", ARG(pc)); pc++;       break;
  274.         case 0xe7: sprintf (buff,"rst  $20");                        break;
  275.         case 0xe8: sprintf (buff,"ret  po");                         break;
  276.         case 0xe9: sprintf (buff,"jp   (hl)");                       break;
  277.         case 0xea: sprintf (buff,"jp   po,$%04x", ARGW(pc)); pc+=2;  break;
  278.         case 0xeb: sprintf (buff,"ex   de,hl");                      break;
  279.         case 0xec: sprintf (buff,"call po,$%04x", ARGW(pc)); pc+=2;  break;
  280.         case 0xed: sprintf (buff,"???  $%02x", op);                  break;
  281.         case 0xee: sprintf (buff,"xor  $%02x", ARG(pc)); pc++;       break;
  282.         case 0xef: sprintf (buff,"rst  $28");                        break;
  283.         case 0xf0: sprintf (buff,"ret  p");                          break;
  284.         case 0xf1: sprintf (buff,"pop  af");                         break;
  285.         case 0xf2: sprintf (buff,"jp   p,$%04x", ARGW(pc)); pc+=2;   break;
  286.         case 0xf3: sprintf (buff,"di");                              break;
  287.         case 0xf4: sprintf (buff,"cp   $%04x", ARGW(pc)); pc+=2;     break;
  288.         case 0xf5: sprintf (buff,"push af");                         break;
  289.         case 0xf6: sprintf (buff,"or   $%02x", ARG(pc)); pc++;       break;
  290.         case 0xf7: sprintf (buff,"rst  $30");                        break;
  291.         case 0xf8: sprintf (buff,"ret  m");                          break;
  292.         case 0xf9: sprintf (buff,"ld   sp,hl");                      break;
  293.         case 0xfa: sprintf (buff,"jp   m,$%04x", ARGW(pc)); pc+=2;   break;
  294.         case 0xfb: sprintf (buff,"ei");                              break;
  295.         case 0xfc: sprintf (buff,"call m,$%04x", ARGW(pc)); pc+=2;   break;
  296.         case 0xfd: sprintf (buff,"???  $%02x", op);                  break;
  297.         case 0xfe: sprintf (buff,"cp   $%02x", ARG(pc)); pc++;       break;
  298.         case 0xff: sprintf (buff,"rst  $38");                        break;
  299. #else
  300.         case 0x00: sprintf (buff,"nop");                             break;
  301.         case 0x01: sprintf (buff,"lxi  b,$%04x", ARGW(pc)); pc+=2;   break;
  302.         case 0x02: sprintf (buff,"stax b");                          break;
  303.         case 0x03: sprintf (buff,"inx  b");                          break;
  304.         case 0x04: sprintf (buff,"inr  b");                          break;
  305.         case 0x05: sprintf (buff,"dcr  b");                          break;
  306.         case 0x06: sprintf (buff,"mvi  b,$%02x", ARG(pc)); pc++;     break;
  307.         case 0x07: sprintf (buff,"rlc");                             break;
  308.         case 0x08: sprintf (buff,"???  $%02x", op);                  break;
  309.         case 0x09: sprintf (buff,"dad  b");                          break;
  310.         case 0x0a: sprintf (buff,"ldax b");                          break;
  311.         case 0x0b: sprintf (buff,"dcx  b");                          break;
  312.         case 0x0c: sprintf (buff,"inr  c");                          break;
  313.         case 0x0d: sprintf (buff,"dcr  c");                          break;
  314.         case 0x0e: sprintf (buff,"mvi  c,$%02x", ARG(pc)); pc++;     break;
  315.         case 0x0f: sprintf (buff,"rrc");                             break;
  316.         case 0x10: sprintf (buff,"???  $%02x", op);                  break;
  317.         case 0x11: sprintf (buff,"lxi  d,$%04x", ARGW(pc)); pc+=2;   break;
  318.         case 0x12: sprintf (buff,"stax d");                          break;
  319.         case 0x13: sprintf (buff,"inx  d");                          break;
  320.         case 0x14: sprintf (buff,"inr  d");                          break;
  321.         case 0x15: sprintf (buff,"dcr  d");                          break;
  322.         case 0x16: sprintf (buff,"mvi  d,$%02x", ARG(pc)); pc++;     break;
  323.         case 0x17: sprintf (buff,"ral");                             break;
  324.         case 0x18: sprintf (buff,"???  $%02x", op);                  break;
  325.         case 0x19: sprintf (buff,"dad  d");                          break;
  326.         case 0x1a: sprintf (buff,"ldax d");                          break;
  327.         case 0x1b: sprintf (buff,"dcx  d");                          break;
  328.         case 0x1c: sprintf (buff,"inr  e");                          break;
  329.         case 0x1d: sprintf (buff,"dcr  e");                          break;
  330.         case 0x1e: sprintf (buff,"mvi  e,$%02x", ARG(pc)); pc++;     break;
  331.         case 0x1f: sprintf (buff,"rar");                             break;
  332.         case 0x20: sprintf (buff,"rim");                             break;
  333.         case 0x21: sprintf (buff,"lxi  h,$%04x", ARGW(pc)); pc+=2;   break;
  334.         case 0x22: sprintf (buff,"shld $%04x", ARGW(pc)); pc+=2;     break;
  335.         case 0x23: sprintf (buff,"inx  h");                          break;
  336.         case 0x24: sprintf (buff,"inr  h");                          break;
  337.         case 0x25: sprintf (buff,"dcr  h");                          break;
  338.         case 0x26: sprintf (buff,"mvi  h,$%02x", ARG(pc)); pc++;     break;
  339.         case 0x27: sprintf (buff,"daa");                             break;
  340.         case 0x28: sprintf (buff,"???  $%02x", op);                  break;
  341.         case 0x29: sprintf (buff,"dad  h");                          break;
  342.         case 0x2a: sprintf (buff,"lhld $%04x", ARGW(pc)); pc+=2;     break;
  343.         case 0x2b: sprintf (buff,"dcx  h");                          break;
  344.         case 0x2c: sprintf (buff,"inr  l");                          break;
  345.         case 0x2d: sprintf (buff,"dcr  l");                          break;
  346.         case 0x2e: sprintf (buff,"mvi  l,$%02x", ARG(pc)); pc++;     break;
  347.         case 0x2f: sprintf (buff,"cma");                             break;
  348.         case 0x30: sprintf (buff,"sim");                             break;
  349.         case 0x31: sprintf (buff,"lxi  sp,$%04x", ARGW(pc)); pc+=2;  break;
  350.         case 0x32: sprintf (buff,"stax $%04x", ARGW(pc)); pc+=2;     break;
  351.         case 0x33: sprintf (buff,"inx  sp");                         break;
  352.         case 0x34: sprintf (buff,"inr  m");                          break;
  353.         case 0x35: sprintf (buff,"dcr  m");                          break;
  354.         case 0x36: sprintf (buff,"mvi  m,$%02x", ARG(pc)); pc++;     break;
  355.         case 0x37: sprintf (buff,"stc");                             break;
  356.         case 0x38: sprintf (buff,"???  $%02x", op);                  break;
  357.         case 0x39: sprintf (buff,"dad sp");                          break;
  358.         case 0x3a: sprintf (buff,"ldax $%04x", ARGW(pc)); pc+=2;     break;
  359.         case 0x3b: sprintf (buff,"dcx  sp");                         break;
  360.         case 0x3c: sprintf (buff,"inr  a");                          break;
  361.         case 0x3d: sprintf (buff,"dcr  a");                          break;
  362.         case 0x3e: sprintf (buff,"mvi  a,$%02x", ARG(pc)); pc++;     break;
  363.         case 0x3f: sprintf (buff,"cmf");                             break;
  364.         case 0x40: sprintf (buff,"mov  b,b");                        break;
  365.         case 0x41: sprintf (buff,"mov  b,c");                        break;
  366.         case 0x42: sprintf (buff,"mov  b,d");                        break;
  367.         case 0x43: sprintf (buff,"mov  b,e");                        break;
  368.         case 0x44: sprintf (buff,"mov  b,h");                        break;
  369.         case 0x45: sprintf (buff,"mov  b,l");                        break;
  370.         case 0x46: sprintf (buff,"mov  b,m");                        break;
  371.         case 0x47: sprintf (buff,"mov  b,a");                        break;
  372.         case 0x48: sprintf (buff,"mov  c,b");                        break;
  373.         case 0x49: sprintf (buff,"mov  c,c");                        break;
  374.         case 0x4a: sprintf (buff,"mov  c,d");                        break;
  375.         case 0x4b: sprintf (buff,"mov  c,e");                        break;
  376.         case 0x4c: sprintf (buff,"mov  c,h");                        break;
  377.         case 0x4d: sprintf (buff,"mov  c,l");                        break;
  378.         case 0x4e: sprintf (buff,"mov  c,m");                        break;
  379.         case 0x4f: sprintf (buff,"mov  c,a");                        break;
  380.         case 0x50: sprintf (buff,"mov  d,b");                        break;
  381.         case 0x51: sprintf (buff,"mov  d,c");                        break;
  382.         case 0x52: sprintf (buff,"mov  d,d");                        break;
  383.         case 0x53: sprintf (buff,"mov  d,e");                        break;
  384.         case 0x54: sprintf (buff,"mov  d,h");                        break;
  385.         case 0x55: sprintf (buff,"mov  d,l");                        break;
  386.         case 0x56: sprintf (buff,"mov  d,m");                        break;
  387.         case 0x57: sprintf (buff,"mov  d,a");                        break;
  388.         case 0x58: sprintf (buff,"mov  e,b");                        break;
  389.         case 0x59: sprintf (buff,"mov  e,c");                        break;
  390.         case 0x5a: sprintf (buff,"mov  e,d");                        break;
  391.         case 0x5b: sprintf (buff,"mov  e,e");                        break;
  392.         case 0x5c: sprintf (buff,"mov  e,h");                        break;
  393.         case 0x5d: sprintf (buff,"mov  e,l");                        break;
  394.         case 0x5e: sprintf (buff,"mov  e,m");                        break;
  395.         case 0x5f: sprintf (buff,"mov  e,a");                        break;
  396.         case 0x60: sprintf (buff,"mov  h,b");                        break;
  397.         case 0x61: sprintf (buff,"mov  h,c");                        break;
  398.         case 0x62: sprintf (buff,"mov  h,d");                        break;
  399.         case 0x63: sprintf (buff,"mov  h,e");                        break;
  400.         case 0x64: sprintf (buff,"mov  h,h");                        break;
  401.         case 0x65: sprintf (buff,"mov  h,l");                        break;
  402.         case 0x66: sprintf (buff,"mov  h,m");                        break;
  403.         case 0x67: sprintf (buff,"mov  h,a");                        break;
  404.         case 0x68: sprintf (buff,"mov  l,b");                        break;
  405.         case 0x69: sprintf (buff,"mov  l,c");                        break;
  406.         case 0x6a: sprintf (buff,"mov  l,d");                        break;
  407.         case 0x6b: sprintf (buff,"mov  l,e");                        break;
  408.         case 0x6c: sprintf (buff,"mov  l,h");                        break;
  409.         case 0x6d: sprintf (buff,"mov  l,l");                        break;
  410.         case 0x6e: sprintf (buff,"mov  l,m");                        break;
  411.         case 0x6f: sprintf (buff,"mov  l,a");                        break;
  412.         case 0x70: sprintf (buff,"mov  m,b");                        break;
  413.         case 0x71: sprintf (buff,"mov  m,c");                        break;
  414.         case 0x72: sprintf (buff,"mov  m,d");                        break;
  415.         case 0x73: sprintf (buff,"mov  m,e");                        break;
  416.         case 0x74: sprintf (buff,"mov  m,h");                        break;
  417.         case 0x75: sprintf (buff,"mov  m,l");                        break;
  418.         case 0x76: sprintf (buff,"mov  m,m");                        break;
  419.         case 0x77: sprintf (buff,"mov  m,a");                        break;
  420.         case 0x78: sprintf (buff,"mov  a,b");                        break;
  421.         case 0x79: sprintf (buff,"mov  a,c");                        break;
  422.         case 0x7a: sprintf (buff,"mov  a,d");                        break;
  423.         case 0x7b: sprintf (buff,"mov  a,e");                        break;
  424.         case 0x7c: sprintf (buff,"mov  a,h");                        break;
  425.         case 0x7d: sprintf (buff,"mov  a,l");                        break;
  426.         case 0x7e: sprintf (buff,"mov  a,m");                        break;
  427.         case 0x7f: sprintf (buff,"mov  a,a");                        break;
  428.         case 0x80: sprintf (buff,"add  b");                          break;
  429.         case 0x81: sprintf (buff,"add  c");                          break;
  430.         case 0x82: sprintf (buff,"add  d");                          break;
  431.         case 0x83: sprintf (buff,"add  e");                          break;
  432.         case 0x84: sprintf (buff,"add  h");                          break;
  433.         case 0x85: sprintf (buff,"add  l");                          break;
  434.         case 0x86: sprintf (buff,"add  m");                          break;
  435.         case 0x87: sprintf (buff,"add  a");                          break;
  436.         case 0x88: sprintf (buff,"adc  b");                          break;
  437.         case 0x89: sprintf (buff,"adc  c");                          break;
  438.         case 0x8a: sprintf (buff,"adc  d");                          break;
  439.         case 0x8b: sprintf (buff,"adc  e");                          break;
  440.         case 0x8c: sprintf (buff,"adc  h");                          break;
  441.         case 0x8d: sprintf (buff,"adc  l");                          break;
  442.         case 0x8e: sprintf (buff,"adc  m");                          break;
  443.         case 0x8f: sprintf (buff,"adc  a");                          break;
  444.         case 0x90: sprintf (buff,"sub  b");                          break;
  445.         case 0x91: sprintf (buff,"sub  c");                          break;
  446.         case 0x92: sprintf (buff,"sub  d");                          break;
  447.         case 0x93: sprintf (buff,"sub  e");                          break;
  448.         case 0x94: sprintf (buff,"sub  h");                          break;
  449.         case 0x95: sprintf (buff,"sub  l");                          break;
  450.         case 0x96: sprintf (buff,"sub  m");                          break;
  451.         case 0x97: sprintf (buff,"sub  a");                          break;
  452.         case 0x98: sprintf (buff,"sbb  b");                          break;
  453.         case 0x99: sprintf (buff,"sbb  c");                          break;
  454.         case 0x9a: sprintf (buff,"sbb  d");                          break;
  455.         case 0x9b: sprintf (buff,"sbb  e");                          break;
  456.         case 0x9c: sprintf (buff,"sbb  h");                          break;
  457.         case 0x9d: sprintf (buff,"sbb  l");                          break;
  458.         case 0x9e: sprintf (buff,"sbb  m");                          break;
  459.         case 0x9f: sprintf (buff,"sbb  a");                          break;
  460.         case 0xa0: sprintf (buff,"ana  b");                          break;
  461.         case 0xa1: sprintf (buff,"ana  c");                          break;
  462.         case 0xa2: sprintf (buff,"ana  d");                          break;
  463.         case 0xa3: sprintf (buff,"ana  e");                          break;
  464.         case 0xa4: sprintf (buff,"ana  h");                          break;
  465.         case 0xa5: sprintf (buff,"ana  l");                          break;
  466.         case 0xa6: sprintf (buff,"ana  m");                          break;
  467.         case 0xa7: sprintf (buff,"ana  a");                          break;
  468.         case 0xa8: sprintf (buff,"xra  b");                          break;
  469.         case 0xa9: sprintf (buff,"xra  c");                          break;
  470.         case 0xaa: sprintf (buff,"xra  d");                          break;
  471.         case 0xab: sprintf (buff,"xra  e");                          break;
  472.         case 0xac: sprintf (buff,"xra  h");                          break;
  473.         case 0xad: sprintf (buff,"xra  l");                          break;
  474.         case 0xae: sprintf (buff,"xra  m");                          break;
  475.         case 0xaf: sprintf (buff,"xra  a");                          break;
  476.         case 0xb0: sprintf (buff,"ora  b");                          break;
  477.         case 0xb1: sprintf (buff,"ora  c");                          break;
  478.         case 0xb2: sprintf (buff,"ora  d");                          break;
  479.         case 0xb3: sprintf (buff,"ora  e");                          break;
  480.         case 0xb4: sprintf (buff,"ora  h");                          break;
  481.         case 0xb5: sprintf (buff,"ora  l");                          break;
  482.         case 0xb6: sprintf (buff,"ora  m");                          break;
  483.         case 0xb7: sprintf (buff,"ora  a");                          break;
  484.         case 0xb8: sprintf (buff,"cmp  b");                          break;
  485.         case 0xb9: sprintf (buff,"cmp  c");                          break;
  486.         case 0xba: sprintf (buff,"cmp  d");                          break;
  487.         case 0xbb: sprintf (buff,"cmp  e");                          break;
  488.         case 0xbc: sprintf (buff,"cmp  h");                          break;
  489.         case 0xbd: sprintf (buff,"cmp  l");                          break;
  490.         case 0xbe: sprintf (buff,"cmp  m");                          break;
  491.         case 0xbf: sprintf (buff,"cmp  a");                          break;
  492.         case 0xc0: sprintf (buff,"rnz");                             break;
  493.         case 0xc1: sprintf (buff,"pop  b");                          break;
  494.         case 0xc2: sprintf (buff,"jnz  $%04x", ARGW(pc)); pc+=2;     break;
  495.         case 0xc3: sprintf (buff,"jmp  $%04x", ARGW(pc)); pc+=2;     break;
  496.         case 0xc4: sprintf (buff,"cnz  $%04x", ARGW(pc)); pc+=2;     break;
  497.         case 0xc5: sprintf (buff,"push b");                          break;
  498.         case 0xc6: sprintf (buff,"adi  $%02x", ARG(pc)); pc++;       break;
  499.         case 0xc7: sprintf (buff,"rst  0");                          break;
  500.         case 0xc8: sprintf (buff,"rz");                              break;
  501.         case 0xc9: sprintf (buff,"ret");                             break;
  502.         case 0xca: sprintf (buff,"jz   $%04x", ARGW(pc)); pc+=2;     break;
  503.         case 0xcb: sprintf (buff,"???  $%02x", op);                  break;
  504.         case 0xcc: sprintf (buff,"cz   $%04x", ARGW(pc)); pc+=2;     break;
  505.         case 0xcd: sprintf (buff,"call $%04x", ARGW(pc)); pc+=2;     break;
  506.         case 0xce: sprintf (buff,"aci  $%02x", ARG(pc)); pc++;       break;
  507.         case 0xcf: sprintf (buff,"rst  1");                          break;
  508.         case 0xd0: sprintf (buff,"rnc");                             break;
  509.         case 0xd1: sprintf (buff,"pop  d");                          break;
  510.         case 0xd2: sprintf (buff,"jnc  $%04x", ARGW(pc)); pc+=2;     break;
  511.         case 0xd3: sprintf (buff,"out  $%02x", ARG(pc)); pc++;       break;
  512.         case 0xd4: sprintf (buff,"cnc  $%04x", ARGW(pc)); pc+=2;     break;
  513.         case 0xd5: sprintf (buff,"push d");                          break;
  514.         case 0xd6: sprintf (buff,"sui  $%02x", ARG(pc)); pc++;       break;
  515.         case 0xd7: sprintf (buff,"rst  2");                          break;
  516.         case 0xd8: sprintf (buff,"rc");                              break;
  517.         case 0xd9: sprintf (buff,"???  $%02x", op);                  break;
  518.         case 0xda: sprintf (buff,"jc   $%04x", ARGW(pc)); pc+=2;     break;
  519.         case 0xdb: sprintf (buff,"in   $%02x", ARG(pc)); pc++;       break;
  520.         case 0xdc: sprintf (buff,"cc   $%04x", ARGW(pc)); pc+=2;     break;
  521.         case 0xdd: sprintf (buff,"???  $%02x", op);                  break;
  522.         case 0xde: sprintf (buff,"sbi  $%02x", ARG(pc)); pc++;       break;
  523.         case 0xdf: sprintf (buff,"rst  3");                          break;
  524.         case 0xe0: sprintf (buff,"rpe");                             break;
  525.         case 0xe1: sprintf (buff,"pop  h");                          break;
  526.         case 0xe2: sprintf (buff,"jpe  $%04x", ARGW(pc)); pc+=2;     break;
  527.         case 0xe3: sprintf (buff,"xthl");                            break;
  528.         case 0xe4: sprintf (buff,"cpe  $%04x", ARGW(pc)); pc+=2;     break;
  529.         case 0xe5: sprintf (buff,"push h");                          break;
  530.         case 0xe6: sprintf (buff,"ani  $%02x", ARG(pc)); pc++;       break;
  531.         case 0xe7: sprintf (buff,"rst  4");                          break;
  532.         case 0xe8: sprintf (buff,"rpo");                             break;
  533.         case 0xe9: sprintf (buff,"pchl");                            break;
  534.         case 0xea: sprintf (buff,"jpo  $%04x", ARGW(pc)); pc+=2;     break;
  535.         case 0xeb: sprintf (buff,"xchg");                            break;
  536.         case 0xec: sprintf (buff,"cpo  $%04x", ARGW(pc)); pc+=2;     break;
  537.         case 0xed: sprintf (buff,"???  $%02x", op);                  break;
  538.         case 0xee: sprintf (buff,"xri  $%02x", ARG(pc)); pc++;       break;
  539.         case 0xef: sprintf (buff,"rst  5");                          break;
  540.         case 0xf0: sprintf (buff,"rp");                              break;
  541.         case 0xf1: sprintf (buff,"pop  a");                          break;
  542.         case 0xf2: sprintf (buff,"jp   $%04x", ARGW(pc)); pc+=2;     break;
  543.         case 0xf3: sprintf (buff,"di");                              break;
  544.         case 0xf4: sprintf (buff,"cp   $%04x", ARGW(pc)); pc+=2;     break;
  545.         case 0xf5: sprintf (buff,"push a");                          break;
  546.         case 0xf6: sprintf (buff,"ori  $%02x", ARG(pc)); pc++;       break;
  547.         case 0xf7: sprintf (buff,"rst  6");                          break;
  548.         case 0xf8: sprintf (buff,"rm");                              break;
  549.         case 0xf9: sprintf (buff,"sphl");                            break;
  550.         case 0xfa: sprintf (buff,"jm   $%04x", ARGW(pc)); pc+=2;     break;
  551.         case 0xfb: sprintf (buff,"ei");                              break;
  552.         case 0xfc: sprintf (buff,"cm   $%04x", ARGW(pc)); pc+=2;     break;
  553.         case 0xfd: sprintf (buff,"???  $%02x", op);                  break;
  554.         case 0xfe: sprintf (buff,"cpi  $%02x", ARG(pc)); pc++;       break;
  555.         case 0xff: sprintf (buff,"rst  7");                          break;
  556. #endif
  557.     }
  558.     return pc - PC;
  559. }
  560.  
  561.